package org.example.service.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.ibatis.annotations.Param;
import org.example.domain.dto.ErpMaterialDTO;
import org.example.domain.po.ErpMaterial;
import org.example.service.ErpMaterialExtendService;
import org.example.service.ErpMaterialService;
import org.example.mapper.ErpMaterialMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
* @author 3400
* @description 针对表【erp_material(产品表)】的数据库操作Service实现
* @createDate 2024-10-30 16:28:35
*/
@Service
public class ErpMaterialServiceImpl extends ServiceImpl<ErpMaterialMapper, ErpMaterial>
    implements ErpMaterialService{
    @Autowired
    ErpMaterialExtendService erpMaterialExtendService;

    public Page<ErpMaterial> findByPage(Page<ErpMaterial> page,
                                        @Param("categoryId")  String categoryId,
                                        @Param("color") String color,
                                        @Param("keyword") String keyword,
                                        @Param("position") String position,
                                        @Param("mfrs") String mfrs,
                                        @Param("weight") String weight,
                                        @Param("expiryNum") String expiryNum,
                                        @Param("remark") String remark,
                                        @Param("enabled") String enabled,
                                        @Param("tenantId") Long tenantId
                                       ){
        return baseMapper.findByPage(page,categoryId,color,keyword,position,mfrs,weight,expiryNum,remark,enabled,tenantId);
    }
    @Override
    public Long getMaxBarCode() {
        return baseMapper.max();
    }

//    @Override
//    public boolean addMaterial(ErpMaterial material) {
//        // 调用 Mapper 层插入商品
//        int result = baseMapper.insertMaterial(material);
//        return result > 0;
//    }
@Override
public boolean addMaterial(ErpMaterial material) {
    // 使用 MyBatis-Plus 的 save 方法插入商品
    return save(material); // save 方法会在插入后将生成的 ID 填充到 material 对象中
}




    // 实现删除商品并删除扩展信息的方法
    @Override
    @Transactional // 增加事务控制
    public boolean deleteMaterial(@Param("id") Long id) {

        // 删除扩展信息
        erpMaterialExtendService.deleteByMaterialId(id);
        // 删除商品
        return removeById(id);
    }

    @Override
    public int checkIfUsed(Long id) {
        return baseMapper.checkIfUsed(id); // 调用 Mapper 层的方法
    }

    @Override
    @Transactional // 增加事务控制
    public boolean updateMaterial(ErpMaterial material) {
        // 使用 MyBatis-Plus 的 updateById 方法更新商品
        return updateById(material);
    }
    @Override
    public Page<ErpMaterialDTO> selectAggregatedData(Page<ErpMaterialDTO> page, Long depotId,Long tenantId
    ){
        return baseMapper.selectAggregatedData(page,depotId ,tenantId);
    }
    @Override
    public List<ErpMaterialDTO> select( Long depotId,Long headerId,Long tenantId) {
        return baseMapper.select( depotId,headerId, tenantId);
    }
    @Override
    public List<ErpMaterialDTO> select2(Long depotId, Long materialId, Long tenantId) {
        return baseMapper.select( depotId,  materialId, tenantId);
    }

}




